// package io.bdmc.modules.api.service.impl;

// import java.io.IOException;
// import java.time.LocalDateTime;
// import java.util.ArrayList;
// import java.util.Date;
// import java.util.HashMap;
// import java.util.List;
// import java.util.Map;

// import com.alibaba.fastjson.JSON;
// import com.alibaba.fastjson.JSONObject;
// import com.baomidou.mybatisplus.core.conditions.Wrapper;
// import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

// import org.slf4j.Logger;
// import org.slf4j.LoggerFactory;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.dao.DataIntegrityViolationException;
// import org.springframework.jms.annotation.JmsListener;
// import org.springframework.stereotype.Service;
// import org.springframework.util.StringUtils;

// import io.bdmc.common.nbapi.sdk.analyze.ParsingMessage;
// import io.bdmc.common.utils.Constant;
// import io.bdmc.common.utils.DateUtils;
// import io.bdmc.common.utils.QCloudSMS;
// import io.bdmc.common.utils.RedisUtils;
// import io.bdmc.common.websocket.MyWebSocket;
// import io.bdmc.common.wechatsdk.TemplateMsgUtil;
// import io.bdmc.modules.api.service.ConsumerService;
// import io.bdmc.modules.bss.entity.SmkAlarm;
// import io.bdmc.modules.bss.entity.SmkDevice;
// import io.bdmc.modules.bss.entity.SmkHeartbeat;
// import io.bdmc.modules.bss.entity.SmkPush;
// import io.bdmc.modules.bss.entity.SmkShop;
// import io.bdmc.modules.bss.entity.SmkSmsconfig;
// import io.bdmc.modules.bss.model.alarm.AlarmData;
// import io.bdmc.modules.bss.model.alarm.AlarmHKData;
// import io.bdmc.modules.bss.model.alarm.AlarmZxyData;
// import io.bdmc.modules.bss.model.alarm.MessageHKData;
// import io.bdmc.modules.bss.model.device.DeviceMessage;
// import io.bdmc.modules.bss.model.device.DeviceModal;
// import io.bdmc.modules.bss.service.ISmkDeviceService;
// import io.bdmc.modules.bss.service.ISmkHeartbeatService;
// import io.bdmc.modules.bss.service.ISmkPushService;
// import io.bdmc.modules.bss.service.ISmkShopService;
// import io.bdmc.modules.bss.service.ISmkSmsconfigService;
// import io.bdmc.modules.sys.entity.SysDept;
// import io.bdmc.modules.sys.entity.SysLog;
// import io.bdmc.modules.sys.service.ISysDeptService;
// import io.bdmc.modules.sys.service.SysLogService;
// import io.bdmc.modules.sys.service.SysUserService;
// import io.netty.util.internal.StringUtil;

// @Service
// public class ConsumerServiceImpl implements ConsumerService {

//     private Logger logger = LoggerFactory.getLogger(getClass());

//     @Autowired
//     private ISmkDeviceService _devSvs;
//     // @Autowired
//     // private ISmkAlarmService _alarmSvs;
//     @Autowired
//     private ISysDeptService _depSvs;
//     @Autowired
//     private QCloudSMS _smsSvs;
//     @Autowired
//     private ISmkPushService _pushSvs;
//     @Autowired
//     private SysUserService _userSvs;
//     @Autowired
//     private ISmkShopService _shopSvs;
//     @Autowired
//     private TemplateMsgUtil _wxMsgSvs;
//     @Autowired
//     private SysLogService _logSvs;
//     @Autowired
//     private ISmkSmsconfigService _configSvs;
//     @Autowired
//     private ISmkHeartbeatService _heartSvs;
//     @Autowired
//     private RedisUtils _redis;

//     /**
//      * 接受3j消息
//      */
//     @Override
//     @JmsListener(destination = "3jadmin.queue")
//     public void receive3jMsg(String json) {
//         System.out.println("3j接受到消息:" + json);
//         JSONObject jobj = JSONObject.parseObject(json);
//         String dataType = jobj.getString("type");
//         String streamId = jobj.getString("streamId");
//         String action = jobj.getString("action");

//         if (!StringUtils.isEmpty(action)) {// action = device-change是设备增删改,为空是设备消息
//             if (dataType.equals("add") && action.equals("device-change")) {// 添加设备
//                 DeviceMessage msg = JSON.parseObject(json, DeviceMessage.class);
//                 for (DeviceModal m : msg.getDevices()) {
//                     SmkDevice dev1 = new SmkDevice();
//                     dev1.setDevKey(m.getDeviceId());
//                     dev1.setDevName(m.getDeviceName());
//                     dev1.setDevModel(m.getDeviceTypeName());
//                     dev1.setImei(m.getExtension().getIMEI());
//                     dev1.setDeptId(1L);
//                     dev1.setCreateBy("3jadmin");
//                     dev1.setCreateDate(LocalDateTime.now());
//                     try {
//                         _devSvs.saveOrUpdate(dev1);
//                     } catch (DataIntegrityViolationException e) {
//                         logger.error(e.getMessage());
//                         continue;
//                     }
//                     SysLog log = new SysLog();
//                     log.setCreateDate(new Date());
//                     log.setMethod("三江平台推送");
//                     log.setOperation("三江平台添加设备");
//                     log.setParams(m.getDeviceType() + "," + m.getDeviceId() + "," + m.getExtension().getIMEI());
//                     log.setTime(0L);
//                     log.setUsername("3jAdmin");
//                     _logSvs.save(log);
//                 }
//                 return;
//             } else if (dataType.equals("update") && action.equals("device-change")) {// 修改设备
//                 return;
//             } else if (dataType.equals("delete") && action.equals("device-change")) {// 删除设备
//                 DeviceMessage msg = JSON.parseObject(json, DeviceMessage.class);
//                 String devkey = msg.getDevices().get(0).getDeviceId();
//                 Wrapper<SmkDevice> w1 = new QueryWrapper<SmkDevice>().eq("dev_key", devkey);
//                 SmkDevice d = _devSvs.getOne(w1);
//                 if (d != null) {
//                     d.deleteById();
//                     logger.info("设备管理：由推送删除设备:" + devkey);
//                     SysLog log = new SysLog();
//                     log.setCreateDate(new Date());
//                     log.setMethod("三江推送");
//                     log.setOperation("三江平台删除设备");
//                     log.setParams(json);
//                     log.setTime(0L);
//                     log.setUsername("3jAdmin");
//                     _logSvs.save(log);
//                 }
//                 return;
//             }
//         }
//         if (StringUtils.isEmpty(streamId)) {
//             logger.info("streamId is null");
//             return;
//         }

//         // 以下是消息推送
//         AlarmData alarm = JSON.parseObject(json, AlarmData.class);
//         Wrapper<SmkDevice> w = new QueryWrapper<SmkDevice>().eq("imei", alarm.getExt().getIMEI());
//         SmkDevice dev = _devSvs.getOne(w);
//         if (dev == null) {
//             logger.info("未找到对应imei的设备");
//             return;
//         }

//         // 心跳和自检,上线
//         if (alarm.getStreamId().equals("heartbeat") || alarm.getStreamId().equals("self_check")
//                 || alarm.getStreamId().equals("batteryPower") || alarm.getStreamId().equals("signalStrength")
//                 || alarm.getStreamId().equals("signalSNR") || alarm.getStreamId().equals("signalECL")
//                 || alarm.getStreamId().equals("rssi") || alarm.getStreamId().equals("smokeScope")
//                 || alarm.getStreamId().equals("dirtyPercent")
//                 || (alarm.getStreamId().equals("online") && alarm.getType().equals("clean"))) {

//             String heart_id = _redis.hashGet("3j_heartbeat_oid", alarm.getOid());
//             if (StringUtils.isEmpty(heart_id)) {// 第一次接收该oid的数据
//                 add3jHeartBeatAndUpdateDevice(alarm, dev);
//             } else {// 已存在该oid的数据
//                 SmkHeartbeat heart = _heartSvs.getById(Long.valueOf(heart_id));
//                 if (heart != null) {
//                     heart = setHeartbeatDataByStreamId(heart, alarm.getStreamId(), alarm.getData());
//                     heart.updateById();
//                 } else {
//                     logger.info("redis数据异常,数据库中找不到对应的心跳数据：" + alarm.getOid());
//                 }
//             }
//             return;
//         }

//         // 报警信息,火警 故障 离线，拆除
//         if (dataType.equals("alarm") && (streamId.equals("online") || streamId.equals("fireAlarm")
//                 || streamId.equals("power") || streamId.equals("sensor") || streamId.equals("integral"))) {

//             String alarm_id = _redis.hashGet("3j_alarm_oid", alarm.getOid());
//             if (StringUtils.isEmpty(alarm_id)) {// 第一次接收该oid的数据
//                 // 插入报警数据并更新设备状态
//                 addAlarmAndUpdateDevice(alarm, dev);
//             } else {
//                 logger.info("报警数据已存在。");
//                 return;
//             }

//             SysDept dep = _depSvs.getById(dev.getDeptId());
//             if (dep == null)
//                 return;

//             SmkShop s = _shopSvs.getById(dev.getShopId());
//             // 发送报警信息给相关人员
//             sendingAlarm(dev, dep, alarm, s);
//             List<Long> ids = new ArrayList<Long>();
//             ids.add(Long.valueOf(dev.getDeptId().toString()));
//             for (String str : dep.getCascader().split(",")) {
//                 if (str != null && str.length() > 0) {
//                     ids.add(Long.valueOf(str));
//                 }
//             }
//             // 查询有权限的用户名,推送websocket信息
//             List<String> names = _userSvs.queryNameByDepIds(ids);
//             if (names.size() > 0) {
//                 try {
//                     Map<String, Object> map = new HashMap<String, Object>();
//                     map.put("deviceName", dev.getDevName());
//                     map.put("alarmData", jobj.getString("data"));
//                     map.put("msgType", dataType);
//                     map.put("streamId", streamId);
//                     map.put("rawData", alarm.getRawData());
//                     map.put("addr", dev.getInstallAddr());
//                     map.put("shopName", s == null ? "未绑定店铺" : s.getShopName());
//                     map.put("lat", s == null ? "" : s.getLat());
//                     map.put("lng", s == null ? "" : s.getLng());
//                     map.put("alarmTime", alarm.getAt());
//                     MyWebSocket.sendInfo(JSONObject.toJSON(map).toString(), names);
//                 } catch (IOException e) {
//                     logger.error(e.getMessage());
//                 }
//             }
//         } // 消除火警。发送短信和语音
//         else if (dataType.equals("clean") && streamId.equals("fireAlarm") || streamId.equals("power")
//                 || streamId.equals("sensor") || streamId.equals("integral")) {
//             SmkShop s = _shopSvs.getById(dev.getShopId());
//             SysDept dep = _depSvs.getById(dev.getDeptId());
//             sendingAlarm(dev, dep, alarm, s);
//         }
//         return;

//     }

//     /**
//      * 接受hk消息
//      */
//     @Override
//     @JmsListener(destination = "hk.queue")
//     public void receivehkMsg(String msg) {
//         logger.info(msg);
//         MessageHKData message = JSON.parseObject(msg, MessageHKData.class);
//         if (StringUtils.isEmpty(message.getMsg().getValue())) {
//             logger.info("设备上线消息，暂不处理");
//             return;
//         }
//         AlarmHKData alarm = ParsingMessage.analysis_Smoke_Msg(message.getMsg().getValue());
//         Wrapper<SmkDevice> w = new QueryWrapper<SmkDevice>().eq("imei", message.getMsg().getImei());
//         SmkDevice dev = _devSvs.getOne(w);
//         if (dev == null) {
//             logger.info("未找到对应imei的设备");
//             return;
//         }
//         String oid = message.getMsg().getImei() + alarm.getOid();
//         if (alarm.getMsgType() == 1) {// 心跳数据
//             String heart_id = _redis.hashGet("hk_heartbeat_oid", oid);
//             if (StringUtils.isEmpty(heart_id)) {// 第一次接收该oid的数据
//                 addHKHeartBeatAndUpdateDevice(alarm, dev);
//             } else {// 已存在该oid的数据
//                 SmkHeartbeat heart = _heartSvs.getById(Long.valueOf(heart_id));
//                 if (heart != null) {
//                     heart.setBatteryPower(alarm.getBatteryPower());
//                     heart.setHeartbeat(alarm.getHeartbeat());
//                     heart.setOnline(alarm.getOnline());
//                     heart.setSelfCheck(alarm.getSelfCheck());
//                     heart.setSignalStrength(alarm.getSignalStrength());
//                     heart.setSignalEcl(alarm.getSignalECL());
//                     heart.setSignalSnr(alarm.getSignalSNR());
//                     heart.setRssi(alarm.getRssi());
//                     heart.setDirtyPercent(alarm.getDirtyPercent());
//                     heart.updateById();
//                 } else {
//                     logger.info("redis数据异常,数据库中找不到对应的心跳数据：" + oid);
//                 }
//             }
//         } else if (alarm.getMsgType() == 2) {// 报警数据,6是消音
//             if (alarm.getAlarmType() == 6) {// 预留 消音 暂不处理
//                 return;
//             }
//             String alarm_id = _redis.hashGet("hk_alarm_oid", oid);
//             if (StringUtils.isEmpty(alarm_id)) {// 第一次接收该oid的数据
//                 // 插入报警数据并更新设备状态
//                 addHKAlarmAndUpdateDevice(alarm, dev);
//             } else {
//                 logger.info("报警数据已存在。");
//                 return;
//             }

//             SysDept dep = _depSvs.getById(dev.getDeptId());
//             if (dep == null)
//                 return;
//             SmkShop s = _shopSvs.getById(dev.getShopId());
//             // 发送报警信息给相关人员
//             AlarmData al = new AlarmData();
//             al.setStreamId(alarm.getStreamId());
//             al.setAt(alarm.getAt());
//             al.setData(alarm.getAlarmDetail());
//             String type = alarm.getAlarmType() == 6 ? "clean" : "alarm";
//             al.setType(type);
//             // sendingAlarm(dev, dep, al, s);
//             List<Long> ids = new ArrayList<Long>();
//             ids.add(Long.valueOf(dev.getDeptId().toString()));
//             for (String str : dep.getCascader().split(",")) {
//                 if (str != null && str.length() > 0) {
//                     ids.add(Long.valueOf(str));
//                 }
//             }
//             // 查询有权限的用户名,推送websocket信息
//             List<String> names = _userSvs.queryNameByDepIds(ids);
//             if (names.size() > 0) {
//                 try {
//                     Map<String, Object> map = new HashMap<String, Object>();
//                     map.put("deviceName", dev.getDevName());
//                     map.put("alarmData", alarm.getAlarmDetail());
//                     map.put("msgType", type);
//                     map.put("streamId", al.getStreamId());
//                     // map.put("rawData", alarm.getRawData());
//                     map.put("addr", dev.getInstallAddr());
//                     map.put("shopName", s == null ? "未绑定店铺" : s.getShopName());
//                     map.put("lat", s == null ? "" : s.getLat());
//                     map.put("lng", s == null ? "" : s.getLng());
//                     map.put("alarmTime", alarm.getAt());
//                     MyWebSocket.sendInfo(JSONObject.toJSON(map).toString(), names);
//                 } catch (IOException e) {
//                     logger.error(e.getMessage());
//                 }
//             }
//         }
//     }

//     /**
//      * 接受zxy消息
//      */
//     @Override
//     @JmsListener(destination = "zxy.queue")
//     public void receiveZxyMsg(String msg) {
//         System.out.println("zxy.queue接受到" + msg);
//         logger.info(msg);
//         AlarmZxyData data = JSON.parseObject(msg, AlarmZxyData.class);
//         String imei = data.getGatewayName();
//         if (StringUtils.isEmpty(imei)) {
//             logger.info("IMEI为空");
//             return;
//         }
//         Wrapper<SmkDevice> w = new QueryWrapper<SmkDevice>().eq("imei", imei);
//         SmkDevice dev = _devSvs.getOne(w);
//         if (dev == null) {
//             logger.info("未找到对应imei的设备:" + imei);
//             return;
//         }
//         AlarmData alarm = new AlarmData();// 统一推送需要用到的报警信息
//         if (data.getPushType() == 1) {// 报警状态通知
//             alarm.setType("alarm");
//             // 插入报警数据
//             SmkAlarm al = new SmkAlarm();
//             if (data.getDeviceState() == 1) {// 火警
//                 al.setAlarmDetail("火警");
//                 al.setAlarmType(2);
//                 alarm.setStreamId("fireAlarm");
//                 alarm.setData("火警");
//                 // } else {// 故障
//             } else if (data.getDeviceState() == 20) {// 故障
//                 al.setAlarmDetail("故障");
//                 al.setAlarmType(3);
//                 alarm.setStreamId("sensor");
//                 alarm.setData("故障");
//             }  else if (data.getDeviceState() == 144) {// 传感器故障
//                 al.setAlarmDetail("传感器故障");
//                 al.setAlarmType(3);
//                 alarm.setStreamId("sensor");
//                 alarm.setData("传感器故障");
//             } else if (data.getDeviceState() == 145) {// 传感器故障恢复
//                 al.setAlarmDetail("传感器故障恢复");
//                 al.setAlarmType(3);
//                 alarm.setStreamId("sensor");
//                 alarm.setData("传感器故障恢复");
//             }else if (data.getDeviceState() == 115) {// 剩余电流报警
//                 al.setAlarmDetail("剩余电流报警");
//                 al.setAlarmType(5);
//                 alarm.setStreamId("power");
//                 alarm.setData("剩余电流报警");
//             } else if (data.getDeviceState() == 150) {// 脱离底座报警
//                 al.setAlarmDetail("底座拆除报警");
//                 al.setAlarmType(4);
//                 alarm.setStreamId("integral");
//                 alarm.setData("底座拆除报警");
//             }else if (data.getDeviceState() == 151) {// 脱离底座报警恢复
//                 al.setAlarmDetail("底座拆除报警解除");
//                 al.setAlarmType(4);
//                 alarm.setStreamId("integral");
//                 alarm.setData("底座拆除报警解除");
//             }
//             else if (data.getDeviceState() == 13) {// 火警解除
//                 al.setAlarmDetail("火警解除");
//                 al.setAlarmType(6);
//                 alarm.setStreamId("alarm");
//                 alarm.setData("火警解除");
//             }
//              else {
//                 al.setAlarmDetail("未知消息类型");
//                 al.setAlarmType(99);
//                 alarm.setStreamId("unknow");
//                 alarm.setData("未知消息类型");
//             }
//             LocalDateTime at = DateUtils.timestamToDatetime(data.getHappenTime());
//             alarm.setAt(DateUtils.formatLocalDateTime(at, DateUtils.DATE_TIME_PATTERN));
//             al.setOid(data.getLogId());
//             al.setAlarmTime(at);
//             al.setAlarmStat(1);// 未处理状态
//             al.setDevId(dev.getDevId());
//             // al.setRawData(alarm.getRawData());
//             al.setJoinDate(LocalDateTime.now());
//             dev.setDevStatus(1);
//             dev.setUpdateDate(LocalDateTime.now());// 设置状态时间
//             dev.updateById();
//             al.insert();
//             SysDept dep = _depSvs.getById(dev.getDeptId());
//             if (dep == null)
//                 return;

//             SmkShop s = _shopSvs.getById(dev.getShopId());
//             // 发送报警信息给相关人员
//             sendingAlarm(dev, dep, alarm, s);
//             List<Long> ids = new ArrayList<Long>();
//             ids.add(Long.valueOf(dev.getDeptId().toString()));
//             for (String str : dep.getCascader().split(",")) {
//                 if (str != null && str.length() > 0) {
//                     ids.add(Long.valueOf(str));
//                 }
//             }
//             // 查询有权限的用户名,推送websocket信息
//             List<String> names = _userSvs.queryNameByDepIds(ids);
//             if (names.size() > 0) {
//                 try {
//                     Map<String, Object> map = new HashMap<String, Object>();
//                     map.put("deviceName", dev.getDevName());
//                     map.put("alarmData", al.getAlarmDetail());
//                     map.put("msgType", "alarm");
//                     map.put("streamId", alarm.getStreamId());
//                     map.put("addr", dev.getInstallAddr());
//                     map.put("shopName", s == null ? "未绑定店铺" : s.getShopName());
//                     map.put("lat", s == null ? "" : s.getLat());
//                     map.put("lng", s == null ? "" : s.getLng());
//                     map.put("alarmTime", al.getAlarmTime());
//                     MyWebSocket.sendInfo(JSONObject.toJSON(map).toString(), names);
//                 } catch (IOException e) {
//                     logger.error(e.getMessage());
//                 }
//             }
//         } else if (data.getPushType() == 2) {// 操作通知
//             if (data.getOptCode() == 1 || data.getOptCode() == 11 || data.getOptCode() == 12) {// 复位，自检，启动,代表上线
//                 SmkHeartbeat heart = new SmkHeartbeat();
//                 heart.setDataTime(DateUtils.timestamToDatetime(data.getHappenTime()));
//                 heart.setDataDetail("复位，自检，启动操作通知");
//                 if(data.getOptCode() == 1){
//                     heart.setReset("设备复位");
//                 }else if(data.getOptCode() == 11){
//                     heart.setReset("设备自检");
//                 }else if(data.getOptCode() == 12){
//                     heart.setOnline("设备启动");
//                 }
//                 heart.setOid(data.getLogId());
//                 heart.setCreateDate(LocalDateTime.now());
//                 heart.setDevId(dev.getDevId());
//                 heart.insert();
//                 dev.setDevStatus(1);
//                 dev.setUpdateDate(heart.getDataTime());
//                 dev.setUpdateDate(LocalDateTime.now());
//                 dev.updateById();
//             } else if (data.getOptCode() == 2) {// 消音
//                 logger.info("zxy消音");
//             }

//         } else if (data.getPushType() == 3) {// 上线离线通知
//             SmkHeartbeat heart = new SmkHeartbeat();
//             heart.setDataTime(DateUtils.timestamToDatetime(data.getHappenTime()));
//             heart.setDataDetail("上线，离线消息");
//             if(data.getDeviceGroupState()==90){
//                 heart.setOnline("正常");
//                 dev.setDevStatus(1);
//             }else if(data.getDeviceGroupState()==91){
//                 heart.setOnline("离线");
//                 dev.setDevStatus(2);
//             }
//             heart.setOid(data.getLogId());
//             heart.setCreateDate(LocalDateTime.now());
//             heart.setDevId(dev.getDevId());
//             heart.insert();
//             dev.setUpdateDate(LocalDateTime.now());
//             dev.updateById();
//         } else {// 未知消息类型
//             logger.info("未知消息类型");
//             return;
//         }
//         return;
//     }

//     // 获取报警联系人，并调用批量发送短信
//     private void sendingAlarm(SmkDevice dev, SysDept dep, AlarmData alarm, SmkShop s) {
//         List<SmkPush> pushMen = _pushSvs.selectByDepId(dep.getDeptId());
//         if (s == null) {
//             logger.info("未绑定店铺，不执行推送");
//             return;
//         }
//         String[] params = { s.getShopName(), dev.getInstallAddr(), dev.getDevName() };
//         String[] brokedownParams = { s.getShopName(), dev.getInstallAddr(), dev.getDevName(), alarm.getData() };
//         String url = Constant.MSGURL + "?lat=" + s.getLat() + "&lng=" + s.getLng() + "&shopName=" + s.getShopName()
//                 + "&addr=" + s.getAddr();
//         if (alarm.getStreamId().equals("fireAlarm") && alarm.getType().equals("alarm")) {// 火警信息
//             if(dep!=null&&dep.getConfigId()!=null&&dep.getConfigId()>0){
//                SmkSmsconfig config = _configSvs.getById(dep.getConfigId());
//                _smsSvs.voiceSendSingle(s.getManagerMobile(),
//                Integer.valueOf(Constant.getVoiceTemplateidByStreamId(alarm.getStreamId(), alarm.getType())),
//                params, Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()),
//                String.valueOf(config.getAppid()), config.getAppkey(),config.getVoiceChannel());//使用部门的推送配置
//             }else{
//                 _smsSvs.voiceSendSingle(s.getManagerMobile(),
//                 Integer.valueOf(Constant.getVoiceTemplateidByStreamId(alarm.getStreamId(), alarm.getType())),
//                 params, Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()),
//                 String.valueOf(Constant.SHORTMSGAPPID), Constant.SHORTMSGAPPKEY,1);//使用系统配置的
//             }
            
//             _smsSvs.smsSendSingle(s.getManagerMobile(),
//                     Integer.valueOf(Constant.getSmsTemplateidByStreamId(alarm.getStreamId(), alarm.getType())), params,
//                     Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()),
//                     String.valueOf(Constant.SHORTMSGAPPID), Constant.SHORTMSGAPPKEY);

          
//             // 新增店铺微信推送火警
//             if (s.getOpenid() != null) {
//                 _wxMsgSvs.sendWXAlarmMsg(new String[] { s.getOpenid() }, alarm.getAt(), s.getShopName(), dev.getImei(),
//                         dev.getDevName(), "火警", alarm.getData(), dev.getInstallAddr(), s.getManagerName(),
//                         s.getManagerMobile(), url);
//             }

//             if (s.getAlarmNotifier() != null && !StringUtil.isNullOrEmpty(s.getAlarmNotifier())) {
//                 String[] contacts = s.getAlarmNotifier().split("\\|");
//                 if (contacts.length > 0) {
//                     for (String contact : contacts) {
//                         String mb = contact.split(",")[1];
//                         _smsSvs.smsSendSingle(mb,
//                                 Integer.valueOf(
//                                         Constant.getSmsTemplateidByStreamId(alarm.getStreamId(), alarm.getType())),
//                                 params, Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()),
//                                 String.valueOf(Constant.SHORTMSGAPPID), Constant.SHORTMSGAPPKEY);

//                         _smsSvs.voiceSendSingle(mb,
//                                 Integer.valueOf(
//                                         Constant.getVoiceTemplateidByStreamId(alarm.getStreamId(), alarm.getType())),
//                                 params, Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()),
//                                 String.valueOf(Constant.SHORTMSGAPPID), Constant.SHORTMSGAPPKEY,1);
//                     }
//                 }
//             }
//             for (SmkPush p : pushMen) {
//                 if (p == null || p.getConfigId() == null) {// 无配置则不推送
//                     continue;
//                 }
//                 String str = p.getFire();
//                 SmkSmsconfig con = _configSvs.getById(p.getConfigId());
//                 if (str != null && str.indexOf("a") != -1) {// 短信推送
//                     _smsSvs.smsSendSingle(p.getMobile(), Integer.valueOf(con.getTempsmsFire()), params,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey());
//                 }

//                 if (str != null && str.indexOf("b") != -1) {// 语音推送
//                     _smsSvs.voiceSendSingle(p.getMobile(), Integer.valueOf(con.getTempvoiceFire()), params,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey(),con.getVoiceChannel());
//                 }

//                 if (str != null && str.indexOf("c") != -1) {// 微信推送
//                     if (!StringUtils.isEmpty(p.getOpenid()))
//                         _wxMsgSvs.sendWXAlarmMsg(new String[] { p.getOpenid() }, alarm.getAt(), s.getShopName(),
//                                 dev.getImei(), dev.getDevName(), "火警", alarm.getData(), dev.getInstallAddr(),
//                                 s.getManagerName(), s.getManagerMobile(), url);
//                 }

//             }

//         } else if ((alarm.getStreamId().equals("sensor") || alarm.getStreamId().equals("power"))
//                 && alarm.getType().equals("alarm")) {// 故障
//             for (SmkPush p : pushMen) {
//                 String str = p.getBreakdown();
//                 if (p.getConfigId() == null || p.getConfigId() <= 0) {// 无配置则不推送
//                     continue;
//                 }
//                 SmkSmsconfig con = _configSvs.getById(p.getConfigId());
//                 if (str != null && str.indexOf("a") != -1) {// 短信推送
//                     _smsSvs.smsSendSingle(p.getMobile(), Integer.valueOf(con.getTempsmsBreakdown()), brokedownParams,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey());
//                 }
//                 if (str != null && str.indexOf("b") != -1) {// 语音推送
//                     _smsSvs.voiceSendSingle(p.getMobile(), Integer.valueOf(con.getTempvoiceBreakdown()),
//                             brokedownParams, Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()),
//                             con.getAppid(), con.getAppkey(),con.getVoiceChannel());
//                 }
//                 if (str != null && str.indexOf("c") != -1) {// 微信推送
//                     if (!StringUtils.isEmpty(p.getOpenid()))
//                         _wxMsgSvs.sendWXAlarmMsg(new String[] { p.getOpenid() }, alarm.getAt(), s.getShopName(),
//                                 dev.getImei(), dev.getDevName(), "故障", alarm.getData(), dev.getInstallAddr(),
//                                 s.getManagerName(), s.getManagerMobile(), url);
//                 }
//             }
//         } else if (alarm.getStreamId().equals("online") && alarm.getType().equals("alarm")) {// 离线
//             for (SmkPush p : pushMen) {
//                 String str = p.getOffline();
//                 if (p.getConfigId() == null || p.getConfigId() <= 0) {// 无配置则不推送
//                     continue;
//                 }
//                 SmkSmsconfig con = _configSvs.getById(p.getConfigId());
//                 if (str != null && str.indexOf("a") != -1) {// 短信推送
//                     _smsSvs.smsSendSingle(p.getMobile(), Integer.valueOf(con.getTempsmsOffline()), params,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey());
//                 }
//                 if (str != null && str.indexOf("b") != -1) {// 语音推送
//                     _smsSvs.voiceSendSingle(p.getMobile(), Integer.valueOf(con.getTempvoiceOffline()), params,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey(),con.getVoiceChannel());
//                 }
//                 if (str != null && str.indexOf("c") != -1) {// 微信推送
//                     if (!StringUtils.isEmpty(p.getOpenid()))
//                         _wxMsgSvs.sendWXAlarmMsg(new String[] { p.getOpenid() }, alarm.getAt(), s.getShopName(),
//                                 dev.getImei(), dev.getDevName(), "离线", alarm.getData(), dev.getInstallAddr(),
//                                 s.getManagerName(), s.getManagerMobile(), url);
//                 }
//             }

//         } else if (alarm.getStreamId().equals("integral") && alarm.getType().equals("alarm")) {// 拆卸
//             for (SmkPush p : pushMen) {
//                 String str = p.getUnload();
//                 if (p.getConfigId() == null || p.getConfigId() <= 0) {// 无配置则不推送
//                     continue;
//                 }
//                 SmkSmsconfig con = _configSvs.getById(p.getConfigId());
//                 if (str != null && str.indexOf("a") != -1) {// 短信推送
//                     _smsSvs.smsSendSingle(p.getMobile(), Integer.valueOf(con.getTempsmsUnload()), params,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey());
//                 }
//                 if (str != null && str.indexOf("b") != -1) {// 语音推送
//                     _smsSvs.voiceSendSingle(p.getMobile(), Integer.valueOf(con.getTempvoiceUnload()), params,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey(),con.getVoiceChannel());
//                 }
//                 if (str != null && str.indexOf("c") != -1) {// 微信推送
//                     if (!StringUtils.isEmpty(p.getOpenid()))
//                         _wxMsgSvs.sendWXAlarmMsg(new String[] { p.getOpenid() }, alarm.getAt(), s.getShopName(),
//                                 dev.getImei(), dev.getDevName(), "拆卸", alarm.getData(), dev.getInstallAddr(),
//                                 s.getManagerName(), s.getManagerMobile(), url);
//                 }
//             }
//         } else if (alarm.getType().equals("clean")) {// 清除报警
//             for (SmkPush p : pushMen) {
//                 String str = p.getClear();
//                 if (p.getConfigId() == null || p.getConfigId() <= 0) {// 无配置则不推送
//                     continue;
//                 }
//                 SmkSmsconfig con = _configSvs.getById(p.getConfigId());
//                 if (str != null && str.indexOf("a") != -1) {// 短信推送
//                     _smsSvs.smsSendSingle(p.getMobile(), Integer.valueOf(con.getTempsmsClear()), params,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey());
//                 }
//                 if (str != null && str.indexOf("b") != -1) {// 语音推送
//                     _smsSvs.voiceSendSingle(p.getMobile(), Integer.valueOf(con.getTempvoiceClear()), params,
//                             Constant.getTemplateDetailByStreamId(alarm.getStreamId(), alarm.getType()), con.getAppid(),
//                             con.getAppkey(),con.getVoiceChannel());
//                 }
//                 if (str != null && str.indexOf("c") != -1) {// 微信推送
//                     if (!StringUtils.isEmpty(p.getOpenid()))
//                         _wxMsgSvs.sendWXAlarmCleanMsg(new String[] { p.getOpenid() }, alarm.getAt(), s.getShopName(),
//                                 dev.getImei(), dev.getDevName(), "火警清除", alarm.getData(), s.getManagerName(),
//                                 s.getManagerMobile());
//                 }
//             }
//         }
//     }

//     /**
//      * 插入3j心跳数据并更新设备
//      */
//     private void add3jHeartBeatAndUpdateDevice(AlarmData alarm, SmkDevice dev) {
//         SmkHeartbeat heart = new SmkHeartbeat();
//         try {
//             heart.setDataTime(DateUtils.stringToLocalDateTime(alarm.getAt()));
//             heart.setDataDetail(alarm.getData());
//             heart.setOid(alarm.getOid());
//             heart.setDataType(Constant.getStrByStreamId(alarm.getStreamId(), alarm.getType()));
//             heart.setRawData(alarm.getRawData());
//             heart.setCreateDate(LocalDateTime.now());
//             heart.setDevId(dev.getDevId());
//             heart = setHeartbeatDataByStreamId(heart, alarm.getStreamId(), alarm.getData());
//             heart.insert();
//             dev.setDevStatus(1);
//             dev.setUpdateDate(heart.getDataTime());
//             dev = setDevDataByStreamId(dev, alarm.getStreamId(), alarm.getData());
//             dev.setUpdateDate(LocalDateTime.now());
//             dev.updateById();
//             _redis.hashPut("3j_heartbeat_oid", alarm.getOid(), heart.getHeartId());// 将id放到缓存
//         } catch (Exception e) {
//             logger.error(e.getMessage());
//         }
//     }

//     /**
//      * 插入海康心跳数据并更新设备
//      */
//     private void addHKHeartBeatAndUpdateDevice(AlarmHKData alarm, SmkDevice dev) {
//         SmkHeartbeat heart = new SmkHeartbeat();
//         try {
//             heart.setDataTime(DateUtils.stringToLocalDateTime(alarm.getAt()));
//             heart.setOid(dev.getImei() + alarm.getOid());
//             heart.setDataType(alarm.getMsgTypeText());
//             // heart.setRawData(alarm.getRawData());
//             heart.setCreateDate(LocalDateTime.now());
//             heart.setDevId(dev.getDevId());
//             heart.setBatteryPower(alarm.getBatteryPower());
//             heart.setHeartbeat(alarm.getHeartbeat());
//             heart.setOnline(alarm.getOnline());
//             heart.setSelfCheck(alarm.getSelfCheck());
//             heart.setSignalStrength(alarm.getSignalStrength());
//             heart.setSignalEcl(alarm.getSignalECL());
//             heart.setSignalSnr(alarm.getSignalSNR());
//             heart.setRssi(alarm.getRssi());
//             heart.setDirtyPercent(alarm.getDirtyPercent());
//             heart.insert();
//             dev.setDevStatus(1);
//             dev.setUpdateDate(heart.getDataTime());
//             dev.setBatteryPower(alarm.getBatteryPower());
//             dev.setSignalStrength(alarm.getSignalStrength());
//             dev.setSignalEcl(alarm.getSignalECL());
//             dev.setSignalSnr(alarm.getSignalSNR());
//             dev.setRssi(alarm.getRssi());
//             dev.setDirtyPercent(alarm.getDirtyPercent());
//             dev.setUpdateDate(LocalDateTime.now());
//             dev.updateById();
//             _redis.hashPut("hk_heartbeat_oid", dev.getImei() + alarm.getOid(), heart.getHeartId());// 将id放到缓存
//         } catch (Exception e) {
//             logger.error(e.getMessage());
//         }
//     }

//     /**
//      * 插入3j报警数据并更新设备
//      */
//     private void addAlarmAndUpdateDevice(AlarmData alarm, SmkDevice dev) {
//         // 插入报警数据
//         SmkAlarm al = new SmkAlarm();
//         al.setAlarmDetail(alarm.getData());
//         al.setOid(alarm.getOid());
//         al.setAlarmTime(DateUtils.stringToLocalDateTime(alarm.getAt()));
//         al.setAlarmStat(1);// 未处理状态
//         al.setDevId(dev.getDevId());
//         al.setRawData(alarm.getRawData());
//         al.setJoinDate(LocalDateTime.now());
//         if (alarm.getType().equals("alarm") && alarm.getStreamId().equals("online")) {// 离线
//             dev.setDevStatus(2);// 离线
//             dev.setUpdateDate(al.getAlarmTime());// 设置状态时间
//             dev.setUpdateDate(LocalDateTime.now());
//             dev.updateById();
//         } else {
//             dev.setDevStatus(1);// 在线
//             dev.setUpdateDate(al.getAlarmTime());// 设置状态时间
//             dev.setUpdateDate(LocalDateTime.now());
//             dev.updateById();
//         }
//         al.setAlarmType(Constant.getAlarmTypeByStreamId(alarm.getStreamId(), alarm.getType()));
//         al.insert();
//         _redis.hashPut("3j_alarm_oid", alarm.getOid(), al.getAlarmId());// 将id放到缓存
//     }

//     /**
//      * 插入报警数据并更新设备
//      */
//     private void addHKAlarmAndUpdateDevice(AlarmHKData alarm, SmkDevice dev) {
//         // 插入报警数据
//         SmkAlarm al = new SmkAlarm();
//         al.setAlarmDetail(alarm.getAlarmDetail());
//         al.setOid(dev.getImei() + alarm.getOid());
//         al.setAlarmTime(DateUtils.stringToLocalDateTime(alarm.getAt()));
//         al.setAlarmStat(1);// 未处理状态
//         al.setDevId(dev.getDevId());
//         // al.setRawData(alarm.getRawData());
//         al.setJoinDate(LocalDateTime.now());
//         dev.setDevStatus(1);// 在线
//         dev.setUpdateDate(al.getAlarmTime());// 设置状态时间
//         dev.setUpdateDate(LocalDateTime.now());
//         dev.updateById();
//         al.setAlarmType(alarm.getAlarmType());
//         al.insert();
//         _redis.hashPut("hk_alarm_oid", dev.getImei() + alarm.getOid(), al.getAlarmId());// 将id放到缓存
//     }

//     /**
//      * 根据消息类型设置设备各个值
//      * 
//      * @param dev
//      * @param streamId
//      * @param data
//      * @return
//      */
//     private SmkDevice setDevDataByStreamId(SmkDevice dev, String streamId, String data) {
//         switch (streamId) {
//         case "batteryPower":
//             dev.setBatteryPower(data);
//             break;
//         case "signalStrength":
//             dev.setSignalStrength(data);
//             break;
//         case "signalSNR":
//             dev.setSignalSnr(data);
//             break;
//         case "signalECL":
//             dev.setSignalEcl(data);
//             break;
//         case "rssi":
//             dev.setRssi(data);
//             break;
//         case "dirtyPercent":
//             dev.setDirtyPercent(data);
//             break;
//         case "smokeScope":
//             dev.setSmokeScope(data);
//             break;
//         default:
//             break;
//         }
//         return dev;
//     }

//     /**
//      * 根据消息类型设置心跳各个值
//      * 
//      * @param heartbeat
//      * @param streamId
//      * @param data
//      * @return
//      */
//     private SmkHeartbeat setHeartbeatDataByStreamId(SmkHeartbeat heart, String streamId, String data) {
//         switch (streamId) {
//         case "online":
//             heart.setOnline(data);
//             break;
//         case "heartbeat":
//             heart.setHeartbeat(data);
//             break;
//         case "self_check":
//             heart.setSelfCheck(data);
//             break;
//         case "batteryPower":
//             heart.setBatteryPower(data);
//             break;
//         case "signalStrength":
//             heart.setSignalStrength(data);
//             break;
//         case "signalSNR":
//             heart.setSignalSnr(data);
//             break;
//         case "signalECL":
//             heart.setSignalEcl(data);
//             break;
//         case "rssi":
//             heart.setRssi(data);
//             break;
//         case "dirtyPercent":
//             heart.setDirtyPercent(data);
//             break;
//         case "smokeScope":
//             heart.setSmokeScope(data);
//         case "reset":
//             heart.setReset(data);
//             break;
//         default:
//             break;
//         }
//         return heart;
//     }
// }